package com.example.rpc_core.proxy;

import com.example.rpc_core.RpcApplication;

import java.lang.reflect.Proxy;

public class ServerProxyFactory {
    /**
     * 获取远程调用服务代理对象
     * @param clazz
     * @return
     * @param <T>
     */
    public static <T> T getProxy(Class<T> clazz){
        if (RpcApplication.getRpcConfig().isMock()){
            return getMockProxy(clazz);
        }
        return (T) Proxy.newProxyInstance(
                clazz.getClassLoader(),
                new Class[]{clazz},
//                new ServiceProxy()
                new TcpServiceProxy()
        );
    }

    /**
     * 获取mock代理对象
     * @param clazz
     * @returnf
     * @param <T>
     */
    public static <T> T getMockProxy(Class<T> clazz){
        return (T) Proxy.newProxyInstance(
                clazz.getClassLoader(),
                new Class[]{clazz},
                new MockProxy()
        );
    }
}
